/**
 * MySQL数据库配置示例
 * 金牛座API文档与类型生成工具
 */
module.exports = {
    // 数据库配置
    database: {
        // 数据库类型
        type: 'mysql',

        // 数据库连接信息
        connection: {
            host: 'localhost',
            port: 3306,
            user: 'root',
            password: 'your_password',
            database: 'your_database_name',
            charset: 'utf8mb4'
        },

        // 连接池配置（可选）
        pool: {
            min: 2,
            max: 10,
            idleTimeoutMillis: 30000,
            createTimeoutMillis: 30000,
            acquireTimeoutMillis: 30000
        },

        // 调试模式（可选）
        debug: false
    },

    // 表配置
    tables: {
        // 包含的表（使用正则表达式匹配）
        include: [
            '.*'  // 默认包含所有表
        ],

        // 排除的表（使用正则表达式匹配）
        exclude: [
            'migration_.*',  // 排除迁移表
            'knex_.*',       // 排除Knex相关表
            'sqlite_.*',     // 排除SQLite系统表
            '.*_temp',       // 排除临时表
            '.*_bak',        // 排除备份表
            '.*_log'         // 排除日志表
        ],

        // 表映射：设置表的自定义属性
        mapping: {
            // 示例：为user_table设置特定属性
            'user_table': {
                moduleName: '用户管理',
                customDescription: '用户信息管理表',
                isCore: true
            },
            // 对产品表设置特定属性
            'product_table': {
                moduleName: '产品管理',
                customDescription: '产品信息管理表',
                isCore: true
            }
        }
    },

    // 输出配置
    output: {
        // 基础输出目录
        baseDir: './output',

        // 表文档输出目录（相对于baseDir）
        tableDocsDir: 'tables',

        // 类型定义输出目录（相对于baseDir）
        typeDefsDir: 'types',

        // 关系图输出目录（相对于baseDir）
        diagramsDir: 'diagrams',

        // 示例代码输出目录（相对于baseDir）
        examplesDir: 'examples',

        // 是否保留现有文件
        preserveExisting: false,

        // 是否自动创建目录
        createDirs: true
    },

    // 文档生成配置
    docGeneration: {
        // 文档格式：markdown 或 html
        format: 'markdown',

        // 是否包含表格详细说明
        includeTableDetails: true,

        // 是否包含字段详细说明
        includeFieldDetails: true,

        // 是否包含索引信息
        includeIndexes: true,

        // 是否包含表关系信息
        includeRelations: true,

        // 是否包含API示例
        includeAPIExamples: true,

        // API示例使用的语言
        apiExampleLanguages: ['curl', 'javascript', 'typescript', 'python', 'java'],

        // 是否生成目录
        generateTOC: true,

        // 字段排序策略：'alphabetical', 'primary_first', 'order_preserved'
        fieldSortStrategy: 'primary_first',

        // 自定义文档标题模板
        titleTemplate: '表名: {{tableName}} - {{tableComment}}',

        // 生成前处理函数
        beforeGenerate: function (tableData) {
            // 可以在这里修改表数据
            return tableData;
        },

        // 生成后处理函数
        afterGenerate: function (generatedContent, tableData) {
            // 可以在这里修改生成的内容
            return generatedContent;
        }
    },

    // 类型生成配置
    typeGeneration: {
        // 接口前缀
        interfacePrefix: 'I',

        // 是否使用字符串表示大整数
        useStringForBigInt: true,

        // 是否生成只读属性
        readonly: false,

        // 是否生成查询参数接口
        generateQueryInterfaces: true,

        // 是否生成分页结果接口
        generatePaginationInterfaces: true,

        // 是否使用严格空值类型（null与undefined区分）
        strictNullChecks: true,

        // 是否为每个表生成单独的文件
        separateFiles: true,

        // 是否添加JSDoc注释
        addJSDocComments: true,

        // 是否包含元数据
        includeMetadata: true,

        // 是否为枚举类型生成枚举值
        generateEnums: true,

        // 自定义类型映射
        typeMapping: {
            // MySQL类型 => TypeScript类型
            'tinyint(1)': 'boolean',
            'bit(1)': 'boolean',
            'smallint': 'number',
            'mediumint': 'number',
            'int': 'number',
            'integer': 'number',
            'bigint': 'string', // 使用字符串表示大整数
            'float': 'number',
            'double': 'number',
            'decimal': 'number',
            'char': 'string',
            'varchar': 'string',
            'tinytext': 'string',
            'text': 'string',
            'mediumtext': 'string',
            'longtext': 'string',
            'json': 'Record<string, any>',
            'date': 'string',
            'datetime': 'string',
            'timestamp': 'string',
            'time': 'string',
            'year': 'number',
            'enum': 'string',
            'set': 'string[]',
            'binary': 'Buffer',
            'varbinary': 'Buffer',
            'tinyblob': 'Buffer',
            'blob': 'Buffer',
            'mediumblob': 'Buffer',
            'longblob': 'Buffer',
            'geometry': 'any',
            'point': 'any',
            'linestring': 'any',
            'polygon': 'any',
            'multipoint': 'any',
            'multilinestring': 'any',
            'multipolygon': 'any',
            'geometrycollection': 'any'
        },

        // 自定义字段类型映射
        fieldTypeMapping: {
            // 为特定字段名设置特定类型
            'status': 'number',
            'is_enabled': 'boolean',
            'created_at': 'Date',
            'updated_at': 'Date'
        }
    },

    // 缓存配置
    cache: {
        // 是否启用缓存
        enabled: true,

        // 缓存目录
        dir: './.cache',

        // 缓存过期时间（毫秒）
        ttl: 86400000,  // 24小时

        // 是否在启动时清除缓存
        clearOnStartup: false
    },

    // 日志配置
    logging: {
        // 日志级别：debug, info, warn, error
        level: 'info',

        // 是否在控制台输出日志
        console: true,

        // 日志文件配置
        file: {
            enabled: true,
            path: './logs/jn-auto.log',
            maxSize: '10m',
            maxFiles: 5
        },

        // 是否显示详细错误
        verbose: true
    },

    // 性能配置
    performance: {
        // 并发处理的表数量
        concurrentTables: 5,

        // 是否使用增量生成
        incrementalGeneration: true,

        // 是否使用工作线程处理
        useWorkers: true,

        // 工作线程数量（0表示根据CPU核心数自动决定）
        workerCount: 0
    },

    // 高级配置
    advanced: {
        // 自定义模板目录
        templatesDir: './templates',

        // 模板引擎：handlebars 或 ejs
        templateEngine: 'handlebars',

        // 自定义Handlebars助手
        handlebarsHelpers: {
            // 示例：添加一个格式化日期的助手
            formatDate: function (date) {
                return new Date(date).toISOString().split('T')[0];
            },
            // 首字母大写
            capitalize: function (str) {
                return str.charAt(0).toUpperCase() + str.slice(1);
            }
        },

        // 插件配置
        plugins: [
            // 示例：使用插件
            // {
            //   name: 'jn-auto-plugin-swagger',
            //   options: {
            //     outputPath: './swagger'
            //   }
            // }
        ],

        // 是否在生成前备份现有文件
        backupBeforeGenerate: true,

        // 备份目录
        backupDir: './backups',

        // HTTP API选项（用于API调用模式）
        http: {
            port: 3000,
            host: 'localhost',
            basePath: '/api',
            cors: true
        }
    }
}; 